package com.lvhx.hook;

import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.support.TransactionSynchronizationAdapter;

@Slf4j
public class MyTransactionHook extends TransactionSynchronizationAdapter {

    // 事务 完全结束后 执行（无论成功或失败都触发，status表示结果状态）。
    @Override
    public void afterCompletion(int status) {
        log.info("=========进入事务提交后钩子，事务状态为：{}", status);
        if (STATUS_COMMITTED == status){
            log.info("=========事务提交成功");
        }

        if (STATUS_ROLLED_BACK == status){
            log.info("=========事务回滚成功");
        }

        if (STATUS_UNKNOWN == status){
            log.info("=========未知事务状态");
        }
    }

    // 事务 提交前 执行（即使后续提交失败也会触发）。
    @Override
    public void beforeCommit(boolean readOnly) {
        log.info("=========进入事务提交前钩子");
    }

    // 事务 完成前 执行（无论提交还是回滚都会触发）。
    @Override
    public void beforeCompletion() {
        log.info("=========进入事务完成前钩子");
    }

    // 事务 成功提交后 执行（仅当提交成功时触发）。
    @Override
    public void afterCommit() {
       log.info("=========进入事务成功提交后钩子");
    }
}
